package org.jeecg.modules.zhoupackage.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.modules.zhoupackage.pojo.*;
import org.jeecg.modules.zhoupackage.pojo.myexcel.SingOrderExcel;
import org.jeecg.modules.zhoupackage.pojo.myexcel.TeamOrderExcel;

import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 面料订单Service
 *
 * @author zxl
 * @since 20200923
 */
public interface IOrderService {

    /**
     * 创建未支付的面料订单
     *
     * @param token 令牌
     * @param order 订单类
     * @return 返回订单ID
     */
    String createFabricOrder(String token, MlccFabricOrderinfo order);


    /**
     * 获取用户订单列表
     *
     * @param token
     * @param orderType
     * @return
     */
    JSONObject getOrderList(int pageNo, int pageSize, String token, int orderType, String time, String endtime,
                            Integer status, String code, String fabricCode, String emp, String cusname, String companyName);

    /**
     * 根据订单id获取面料订单详情
     *
     * @param token
     * @param fabricOrderId
     * @return
     */
    List<CartEntity> getFabricOrderList(String token, int fabricOrderId);

    /**
     * 面料订单售后
     *
     * @param token
     * @param orderId
     * @param number
     * @return
     */
    int fabricAfterSales(String token, String orderSn, String number, String reason, int salaryType);

    /**
     * 获取用户订单列表
     *
     * @param pageNo
     * @param pageSize
     * @param token
     * @param orderType
     * @param time
     * @param endTime
     * @param status
     * @param code
     * @return
     */
    JSONObject getAfterSalesList(Integer pageNo, Integer pageSize, String token, int orderType, Date time, Date endTime, Integer status, String code);

    /**
     * 我的订单界面导出个订订单Excel
     *
     * @param token     令牌
     * @param orderType 订单类型
     * @return
     */
    List<SingOrderExcel> getOrderExcel(String token);

    /**
     * 面料订单导出Excel
     *
     * @param token 令牌
     * @return
     */
    List<MyFabricOrderExcel> getFabricOrderExcel(String token);

    /**
     * 导出团订列表Excel
     *
     * @param token 令牌
     * @return
     */
    List<TeamOrderExcel> getTeamOrderExcel(String token);

    /**
     * 我的订单——个订售后
     *
     * @param token      令牌
     * @param orderSn    订单编号
     * @param salaryType 售后类型
     * @param reason     售后原因
     * @param number     运单号
     * @return 返回结果
     */
    int SingleOrderAfter(String token, String orderSn, int salaryType, String reason, String number);

    /**
     * 我的订单——团订售后
     *
     * @param token      令牌
     * @param orderSn    订单编号
     * @param salaryType 售后类型
     * @param reason     售后原因
     * @param number     运单号
     * @return 返回结果
     */
    int teamOrderAfter(String token, String orderSn, int salaryType, String reason, String number);

    /**
     * 个订返修更新产品尺寸
     *
     * @param token     令牌
     * @param productID 产品ID
     * @param sizeID    尺寸ID
     * @param sizeValue 具体的值
     * @return
     */
    int updateProductSize(String token, String productID, String sizeID, String sizeValue);

    /**
     * 个订——返修界面提交
     *
     * @param afterCode 售后订单编号
     * @param token     令牌
     * @param orderSn   订单编号
     * @param reason    售后原因
     * @param imgURL    售后图片
     * @param money     售后金额
     */
    int updateSingleOrder(String afterCode, String token, String orderSn, String reason, String imgURL, String money, String pid);

    /**
     * 团订返修界面的查询员工
     *
     * @param token      令牌
     * @param codeOrName 员工名称或者编码
     * @param customerId 订单里的客户ID
     * @return
     */
    List<MlccCustomerInfo> selectEmployees(String token, String codeOrName, String customerId);

    /**
     * 团订返修界面获取团订基本信息
     *
     * @param token   令牌
     * @param orderSn 团订订单号
     * @return
     */
    MlccTeamOrderInfo getTeamOrderDetail(String token, String orderSn);

    /**
     * 团订返修界面获取部门下产品列表
     *
     * @param token
     * @param departid
     * @param orderSn
     * @return
     */
    List<MlccProductInfo> getProductList(String token, String departid, String orderSn);

    /**
     * 根据选中的产品获取尺寸列表
     *
     * @param token
     * @param productID
     * @return
     */
    List<MlccProductBodysize> getSizeList(String token, String productID);

    /**
     * 我的订单未支付订单的取消订单
     *
     * @param token     令牌
     * @param orderType 订单类型 3面料  0个订订单  1团订订单
     * @param orderSn   订单编号
     */
    int delOrder(String token, Integer orderType, String orderSn);

    /**
     * 订单跟踪状态
     *
     * @param token
     * @param orderSn
     * @return
     */
    List<MlccTrackingOrder> getFabricOrderTracking(String token, String orderSn, Integer orderType);

    /**
     * 我的订单，订单详情的立即支付
     *
     * @param token     令牌
     * @param orderType 订单类型 3面料订单，0个订，1团订
     * @param orderSn   订单编号
     * @return 支付的结果
     */
    int buyNow(String token, Integer orderType, String orderSn, String remark);

    /**
     * web端我的订单——面料订单申请售后
     *
     * @param token     令牌
     * @param orderSn   订单号
     * @param remark    申请售后原因
     * @param afterType 售后类型 0退货，1换货
     * @param cart      （购物车id）
     * @return 结果
     */
    int applicationAafter(String token, String orderSn, String remark, Integer afterType, String img, String cart);

    /**
     * 个订取产品状态跟踪列表
     *
     * @param token   令牌
     * @param orderSn 订单编号
     * @return
     */
    List<MlccTrackingProduct> listtrackingProduct(String token, String orderSn);

    /**
     * 根据产品ID获取可以返修的身体数据
     *
     * @param token     令牌
     * @param priductID 产品ID
     * @return
     */
    Set<MlccCategoryFanxiuInfo> listProductBodySize(String token, String priductID);

    /**
     * 个订产品返修
     *
     * @param token     令牌
     * @param productID 产品ID
     * @param sizeID    尺寸ID
     * @param sizeValue 尺寸值
     * @return
     */
    int saveFanxiuSize(String afterCode, String token, String productID, String sizeID, String sizeValue, String sizeTitle, String orderSn);

    /**
     * 订单售后记录跟踪
     *
     * @param token     令牌
     * @param orderSn   订单编号
     * @param orderType 订单类型
     * @return 售后记录列表
     */
    IPage<MlccAfterSalesinfo> listTeamAfter(Page<MlccAfterSalesinfo> page, String token, String orderSn, Integer orderType);

    /**
     * 创建一条个订售后订单，返回售后订单编号
     *
     * @param orderSn 个订订单编号
     */
    String createSingleAfterOrder(String orderSn, String token);

    /**
     * 查询个订订单本次返修的价格
     *
     * @param afterCode 售后订单编号
     * @param orderSn   个订顶订单编号
     * @param pid       产品id
     */
    double selectSingleFanxiuPrice(String afterCode, String orderSn, String pid);
}
